22449
12535
この質問にはすでにここに答えがあります:
Expressjs-リダイレクトできません
(4つの答え)
7年前に閉鎖されました。
以下のミドルウェアでpassportjsを使用しています。ユーザーが特定のことを要求したときに、ユーザーがログインしているかどうかを確認することを想定しています。サインインしていない場合は、ログインページにリダイレクトする必要があります。
次のようなリクエストルートがあります。
app.put( '/ fantasyteams /:fantasyTeamId'、auth.requiresLogin、fantasyteams.update);
このルートは、ユーザーがWebサイトのFantasyTeamというリソースを更新しようとしたときに呼び出されます。
auth.requiresLoginは、次のようなミドルウェアです。
exports.requiresLogin = function(req、res、next){
if(req.isAuthenticated()){
next()を返す
}
res.redirect( "/ signin");を返します。
};
ユーザーにログインした後、セッションCookieを削除してセッションの有効期限をシミュレートしました。その後、ウェブサイトを通じて、ファンタジーチーム番号123を更新するためにPUT '/ fantasyteams / 123'リクエストを行いました。
fantasyteams.updateは、単にmongodb / mongooseの保存操作です。
exports.update = function(req、res){
var fantasyteam = req.fantasyteam;
fantasyteam = _.extend(fantasyteam、req.body);
fantasyteam.save(function(err){
res.jsonp(fantasyteam);
});
};
予想どおり、上記のルートハンドラー(app.put ...)がリクエストをキャッチし、auth.requiresLoginミドルウェアに渡して、ユーザーがログインしているかどうかを確認します。彼のセッションCookie。 res.redirectは期待どおりに呼び出されます。ただし、Webサイトはサインインページにリダイレクトされません。これはnode.jsコマンドログに表示されます。
PUT / signin 404 328ms
私は何を間違えましたか? 
問題は、PUT / signinのルートハンドラーがないことのようです。元のリクエストはプットだったので、リダイレクトしても、ブラウザからの同じ「プット」リクエストの一部のままです。 app.all( '/ signin')を使用してput / post / whateverのハンドラーを追加するだけです
3
|
あなたが探している答えではありませんか? node.jsセッションCookieエクスプレスpassport.jsでタグ付けされた他の質問を参照するか、独自の質問をしてください。